package code08_常用类.包装类;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public class Test02_装箱与拆箱 {
    public static void main(String[] args) {
        // 装箱:将基本数据类型转换成包装类
        int i = 1;
        // 在JDK5之前必须手动装箱
        Integer integer = Integer.valueOf(i);
        // 在JDK5开始,会自动装箱
        Integer integer2 = i;
        // 拆箱:将包装类转换成基本数据类型
        // JDK5之前需要手动拆箱
        int i2 = integer.intValue();
        // JDK5之后自动进行拆箱
        int i3 = integer;

        // 在使用基本数据类型与包装类比较的时候,会产生自动拆箱的操作
        // 在int类型的数据与integer类型比较时,会将integer进行自动拆箱
        // 将拆箱后的integer数据与int数据进行比较
        // 所以此时比较的是两个值的大小,与地址无关了
        System.out.println(i3 == integer);

        // 首先将int类型的值1装箱为Integer类型
        // 然后通过多态操作
        Object obj = 1;

        // 当没有test(int i)的方法的时候
        // 为了满足test(Integer i)的方法会进行自动装箱
        // 而如果本身就存在test(int i)的方法,那么就会直接调用
        // 此处执行了:调用了int类型的方法
        test(1);

        Integer integer3 = 1;
        test(integer3);
    }

    public static void test(int i){
        System.out.println("调用了int类型的方法");
    }

    public static void test(Integer i){
        System.out.println("调用了Integer类型的方法");
    }
}
